package java学习.算法.动态规划.暴力递归与动态规划;

/**
 * **************
 * 项目名称: 蓝桥杯 <br/>
 * 文件名称:  <br/>
 * 文件描述: 这里添加您的类文件描述，说明当前文件要包含的功能。 <br/>
 * 文件创建：刘世锦 <br/>
 * 创建时间: 2022/5/29 <br/>
 *
 * @version v1.0 <br/>
 * @update [序号][日期YYYY-MM-DD][更改人姓名][变更描述]<br/>
 * *************
 */
public class 买卖股票的最好时机I {
    public static void main(String[] args) {
//        int [] price = {8,9,2,5,4,7,1};
        int [] price = {2,4,1};
        System.out.println(maxProfit(price));
//        System.out.println(findMax(price,4));
        System.out.println(maxProfit1(price));
    }

    public   static int maxProfit (int[] prices) {
//      return   process(prices,1,0);
      return process1(prices,1);
    }

    private static int process1(int[] prices, int i) {
        int res=0,minIn = prices[0];

        for (; i< prices.length; i++) {
        minIn = Math.min(prices[i],minIn);
        res = Math.max(res,prices[i]-minIn);
        }
        return res;
    }

    public static   int maxProfit1(int [] prices){
        int min = prices[0];
        int profix = 0;
        for (int price : prices) {
            min = Math.min(price,min);
            profix = Math.max(profix,price-min);
        }
        return  profix;
    }


    public static int process(int[] prices, int i,  int curIn) {
        int max=0,pro=0;
        int n = prices.length;
        if (i==n){ //
            return 0;
        }
      if (prices[i]-prices[curIn] > 0  && (prices[i]-prices[curIn] > max)  ){
          max = prices[i]-prices[curIn];

           pro= process(prices, i + 1, curIn);
      }else{
//          此时curIn比 i 的 大
          curIn = i ;
          max=0; // 重新开始
          i=i+1; // i到下一个

      }
        return  Math.max(max,pro);
    }

//    public static int maxProfitt (int[] prices) {
////        way(prices,i,)
//        int in = prices[0];
//        int profix = 0;
//        for (int i = 0; i < prices.length; i++) {
//            if (i+1<prices.length){
//                if (prices[i]<prices[i+1] && in>prices[i]){
//                    in = prices[i];
//                    profix = findMax(prices,i) - in;
//
//                }
//            }
//        }
//        if (in<0) return 0;
//        return profix;
//    }

    public  static int findMax(int[] arr,int index){
        int max = 0;
        for (int i = index; i <arr.length; i++) {
            if (arr[i]>max){
                max = arr[i];
            }
        }

        return max;
    }

}
